\subsection{auditar.bash}
\subsubsection{Descripción}
Este comando es ejecutado por el demonio DETECTAR si se encuentran archivos a auditar en la carpeta {\ttfamily \$CURRDIR/\$DATADIR/preparados}. La invocación desde el demonio se hace de la siguiente manera: \\ {\ttfamily \$ . \$AUDITAR\_CMD}

Donde la variable {\ttfamily \$AUDITAR\_CMD} contiene el nombre del comando establecido en la instalación. Se ejecuta con el {\ttfamily '.'} para que el comando pueda utilizar todas las variables del entorno. También es ejecutado en background, de manera de que el demonio DETECTAR pueda seguir con sus tareas.

Mientras el demonio DETECTAR está corriendo, tiene establecida la variable {\ttfamily \$DETECTAR\_CORRIENDO} en uno, de esta forma, el comando AUDITAR chequea que esta variable esté establecida en uno antes de comenzar su ejecución, caso contrario finaliza, retornando un código de error.

El comando se encarga de validar los archivos de clientes, registro a registro y de generar un archivo universo que sirva para efectuar la segmentación de campañas.
\subsubsection{Tipo}
	Solicitado.
\subsubsection{Lenguaje}
	BASH Scripting.

\subsubsection{Archivo de Input}
\begin{itemize}
	\item Archivo de configuración: {\ttfamily \$CURRDIR/conf/segmentar.conf}.
	\item Tabla de antenas: {\ttfamily \$CURRDIR/conf/antenas.dat}.
	\item Tabla de morosidad: {\ttfamily \$CURRDIR/conf/morosos.dat}.
	\item Archivos para auditar: {\ttfamily \$CURRDIR/\$DATADIR/preparados/aaaammdd.<central>.}
\end{itemize}
\subsubsection{Archivos de Output}
\begin{itemize}
	\item Archivo de universo: {\ttfamily \$CURRDIR/\$DATADIR/listos/universo.adsl}.
	\item Archivo de log: {\ttfamily \$CURRDIR/\$LOGDIR/<nombre\_del\_comando>.log}.
	\item Archivos rechazados: {\ttfamily \$CURRDIR/\$DATADIR/rechazados}.
	\item Archivos auditados: {\ttfamily \$CURRDIR/\$DATADIR/preparados/proc/aaaammdd.<central>.}
	\item Archivo de errores: {\ttfamily \$CURRDIR/conf/errores.log}.
\end{itemize}

\subsubsection{Parámetros}
\begin{itemize}
	\item -
\end{itemize}
\subsubsection{Opciones}
\begin{itemize}
	\item -
\end{itemize}

\subsubsection{Pasos}
\begin{enumerate}
	\item Chequea que el demonio DETECTAR esté corriendo, en caso afirmativo continúa con la ejecución, sino, se produce un error y finaliza con código de retorno 1.
	\item Calcula las variables utilizadas de acuerdo a las variables de entorno.
	\item Graba en el archivo de log, con el formato establecido, “Inicio de Auditoría”.
	\item Se verifica que la cantidad de archivos en el directorio {\ttfamily \$CURRDIR/\$DATADIR/preparados} no sea cero, para continuar con el proceso. En caso de no haber archivos en la carpeta, se graba con formato de log en el archivo de log y con formato de error en el archivo de errores, el mensaje “Fin de auditoría con error”. Se finaliza la ejecución del comando y se retorna el valor 2.
	\item Por cada archivo a auditar:
	\begin{enumerate}
		\item Se verifica que no sea un archivo duplicado. Para ello se verifica que no exista ningún archivo con el mismo nombre  en el directorio: \\ {\ttfamily \$DATADIR/preparados/pro}
		\begin{enumerate}
			\item Si existe un archivo con el mismo nombre, entonces rechaza el archivo e invoca al comando MOVER para mover el archivo a {\ttfamily \$CURRDIR/\$DATADIR/rechazados}.
			\item Si el archivo no está duplicado, continua con el proceso.
		\end{enumerate}
		\item Graba con formato de log en el archivo de log “Auditando archivo <nombre\_archivo>”.
		\item Por cada registro de input del archivo:
		\begin{enumerate}
			\item Chequea mediante expresiones regulares que el registro sea válido.
			\begin{enumerate}
				\item Si el registro es inválido, graba en el archivo de log, con formato de log: \\
				{\ttfamily “Registro <num\_reg> del archivo <nom\_arch> descartado”}. \\
				Vuelve al punto 5.c.
				\item Si el registro es válido, continua el proceso.
			\end{enumerate}
			\item Arma el registro de salida como se indica en el enunciado.
			\item Graba el registro de salida en el archivo universo.adsl (si no exite lo crea, sino agrega al final).
		\end{enumerate}
		\item Vuelve al paso 5.3 hasta que se terminen los registros de input.
		\item Por cada archivo procesado graba en el log, con formato de log: \\
		{\ttfamily “Cantidad de registros de input” y “Cantidad de registros de output”}
		\item Mueve mediante el comando MOVER el archivo procesado al directorio: \\ {\ttfamily \$CURRDIR/\$DATADIR/preparados/proc}
	\end{enumerate}
	\item Vuelve al paso 5 hasta que se procesen todos los archivos.
	\item Graba en el archivo de log, con formato de log “Fin de auditoría”.
	\item Retorna con valor 0.
\end{enumerate}

\subsubsection{Invocación}
Sólo puede ejecutarse si el demonio DETECTAR está corriendo. \\
{\ttfamily \$ <nombre\_comando>.bash} \\


